package com.cskaoyan.javase.oop3._2inner._5anonymous._1basic;

import com.sun.org.apache.xerces.internal.util.EntityResolverWrapper;

/**
 * 语法:
 * new 类名或者接口名(){
 *     // 某类名或接口名的子类的类体
 * };
 *
 * 匿名内部类使用过程的一些细节上的问题:
 *      1.语法结构中的"()"是摆设吗?是纯粹的语法结构吗?还是说有别的用途?
 *          不是摆设,而是给父类的构造器传参
 *          而无论是普通类还是抽象类做父类,它们都有构造器
 *          但是接口没有构造器,如果语法表示创建接口的子类对象,那么这时的"()"就是单纯语法结构了
 *
 *     2.匿名内部类作为一种特殊的局部内部类,它有没有自身的构造器?(了解)
 *          匿名内部类当中是无法直接定义构造器的结构的(因为我们也不知道这个匿名子类的名称,无法自己定义构造器)
 *          但它实际上是存在构造器,隐藏在底层,由底层创建
 *
 *
 * @since 14:58
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 使用匿名内部类创建抽象类BaseA的子类对象
        new BaseA(100) {
            @Override
            public void method() {
                System.out.println("666666!");
                System.out.println(num);
            }
        }.method();

        // 使用匿名内部类创建接口IA的子类对象
        new IA() {
            @Override
            public void method() {
            }
        };
    }
}

abstract class BaseA {
    int num;

    public BaseA(int num) {
        this.num = num;
    }

    public abstract void method();
}

interface IA {
    void method();
}